/**
 * @file bibclient.h
 * @brief Header file per il client del progetto BIBLIO
 * @author Marco Luisi
 * Si dichiara che il contenuto di questo file e' in ogni sua parte opera originale dell' autore.
 */
#ifndef BIBCLIENT_H_
#define BIBCLIENT_H_

/** Messaggio di errore sui parametri di avvio */
#define ERR_PARAM "Numero di parametri errato\n"

/** @name Messaggi di errore del parsing dei parametri
 *  Messaggi di errore per l'utente.
 */
/**@{*/
#define ERR_OPT "Parametro %s errato!\n"
#define ERR_MUL "Parametro %s specificato più di una volta!\n"
#define ERR_BUF "Errore, la dimensione totale dei parametri è superiore al limite consentito!\n"
#define ERR_PAT "Errore, nel path %s."
/**@}*/

/** @name Messaggi di errore nelle comunicazioni con il server
 *  Messaggi di errore per l'utente.
 */
/**@{*/
#define ERR_CON "Errore, impossibile collegarsi alla biblioteca %s\n"
#define ERR_SND "Errore nell'invio della richiesta alla biblioteca %s\n"
#define ERR_RCV "Errore nella ricezione della risposta dalla biblioteca %s\n"
#define ERR_CLS "Errore nella chiusura della connessione con la biblioteca %s\n"
#define ERR_FIL "Errore nell'apertura del file di configurazione\n"
#define ERR_COM "Errore nella comunicazione con la biblioteca %s\n"
/**@}*/

/** Messaggio di fine comunicazioni dalla biblioteca*/
#define BIB_END "Fine messaggi da %s\n"

/** @name Stringhe per il matching delle opzioni
 *  Utilizzate nella funzione parse_option()
 */
/**@{*/
#define AUTORE_ "--autore=%[^\n]s"
#define TITOLO_ "--titolo=%[^\n]s"
#define EDITORE_ "--editore=%[^\n]s"
#define LUOGO_PUBBLICAZIONE_ "--luogo_pubblicazione=%[^\n]s"
#define ANNO_ "--anno=%[^\n]s"
#define COLLOCAZIONE_ "--collocazione=%[^\n]s"
#define DESCRIZIONE_FISICA_ "--descrizione_fisica=%[^\n]s"
#define NOTA_ "--nota=%[^\n]s"
#define PRESTITO_ "--prestito=%[^\n]s"
#define LOAN_ "-p"
/**@}*/

/** Array con i pattern delle opzioni */
#define OPTION_FORMATS {AUTORE_, TITOLO_, EDITORE_, LUOGO_PUBBLICAZIONE_, ANNO_, COLLOCAZIONE_, DESCRIZIONE_FISICA_, NOTA_, PRESTITO_}

/**/
/** @name Codici di esito per la funzione parse_option()
 *  Utilizzate nella funzione parse_option()
 */
/**@{*/
#define PARSE_OK 0
#define PARSE_ERROR -1
#define PARSE_MUL -2
#define PARSE_MAXBUF -3
/**@}*/

/** File con l'elenco delle biblioteche */
#define CONF "bib.conf"

/**
 * @brief Funzione di parsing dei parametri da riga di comando
 * @param arg argomento da linea di comando da parsare
 * @return risultato del parsing
 * @retval PARSE_ERROR errore
 * @retval PARSE_MAXBUF limite del buffer del messaggio superato
 * @retval PARSE_MUL opzione specificata più volte
 * @retval PARSE_OK opzione corretta
 */
int parse_option(char *arg);

#endif /* BIBCLIENT_H_ */
